Augmented Reality
hr.icon
AR(Augmented Reality:拡張現実)は、仮想のオブジェクトと現実の世界をシームレスに融合させることで、没入感のある魅力的な体験を提供します。
デバイスのカメラを使って物理的な世界をライブで表示しながら、アプリは3次元の仮想オブジェクトを重ね合わせ、あたかもそのオブジェクトが実際に存在しているかのように見せることができます。
アプリが提供する体験に応じて、ユーザーはデバイスの向きを変えてさまざまな角度からオブジェクトを探索したり、ジェスチャーや動きを使ってオブジェクトとインタラクトしたり、さらには他のユーザーと一緒にマルチユーザーAR体験をしたりすることができます。
開発者向けのガイダンスについては、ARKitを参照してください。 AR機能を提供するのは、性能の高いデバイスに限られます。
アプリの主な目的がARである場合、ARKitをサポートするデバイスにのみアプリを提供します。
アプリに特定のAR機能を必要とする機能が含まれている場合や、アプリでAR機能がオプションとなっている場合は、サポートされていないデバイスでこれらの機能を使用しようとするとエラーが表示されるのではなく、サポートされていないデバイスでの機能の提供を避けるようにしてください。
Creating an Engaging, Comfortable Experience
ディスプレイ全体を使ってもらう。
物理的な世界とアプリの仮想オブジェクトを表示するために、画面のできるだけ多くの部分を使います。
没入感を失わせるようなコントロールや情報で画面をごちゃごちゃさせないようにしましょう。
リアルなオブジェクトを配置する際には、錯覚を起こさせるような演出を心がけましょう。
詳細な3Dアセットとリアルなテクスチャを設計し、配置した物理的環境に生息しているかのようなオブジェクトを作成します。
ARKitの情報を利用して、オブジェクトを適切にスケーリングして、検出された実世界の表面に配置したり、環境の照明条件を反映してカメラの粒をシミュレートしたり、実世界の表面にトップダウンの拡散オブジェクトの影を落としたり、カメラの位置の変化に合わせてビジュアルを更新したりすることができます。
錯覚を起こさないためには、1秒間に60回のシーン更新を行い、オブジェクトが飛び跳ねたり、ちらついたりしないようにします。
反射面を持つ仮想オブジェクトが環境をどのように表現するかを検討します。
ARKitの反射は、カメラで撮影された環境に基づいた近似値です。
AR体験が現実であるかのような錯覚を維持するためには、反射面が小さいか粗いものを選び、これらの近似値の効果を弱めるようにします。
没入感を高めるために、オーディオやハプティクスを使用します。
仮想物体が物理的な表面や他の仮想物体と接触したことを確認するには、効果音や衝撃音が有効です。
また、BGMを流すことで、バーチャルな世界に人々を引き込むことができます。
環境内のテキストを最小限にする。
アプリの使用に必要な情報のみを表示します。
追加の情報やコントロールが必要な場合は、スクリーンスペースに表示することを検討してください。
スクリーンスペースに表示されるコンテンツは、仮想世界またはデバイスの画面上の一貫した場所に固定されているように見えます(あまり一般的ではありません)。
スクリーンスペースに表示されるコンテンツは固定されていますが、下層のAR環境はデバイスに合わせて移動するため、ユーザーがコンテンツを見つけたり見たりするのは容易です。
持続的なコントロールが必要な場合は、間接的なコントロールの使用を検討してください。
間接的なコントロールは、仮想環境の一部ではなく、スクリーンスペースに表示される2Dコントロールです。
ユーザーがアプリ内で永続的なコントロールにアクセスする必要がある場合は、コントロールに到達するためにデバイスの持ち方を調整する必要がないようにコントロールを配置することを検討してください。
また、間接コントロールに半透明を使用することで、背景のシーンを妨げないようにすることも検討してください。
例えば、「Measure」アプリでは、現実世界で物を測るときに使用する半透明と不透明のコントロールを画面に表示しています。
https://gyazo.com/10418bccdb57e15b2f5ffaabd6d85f89
このアプリは、さまざまな環境で使われることを想定しています。
移動するスペースがあまりない場所や、大きくて平らな面がない場所でアプリを開くかもしれません。
アプリの要件と期待値を前もって明確に伝え、物理的環境がAR体験にどのような影響を与えるかを理解してもらいます。
また、異なる環境で使用するために、異なる機能を提供することも考えられます。
人々の快適さに配慮する。
デバイスを一定の距離や角度で長時間保持することは、疲労の原因となります。
疲れないようにするためには、デバイスを近づけなくても済むような距離に物を置いたり、ゲームの場合はレベルを短くして、短時間の休憩を挟むなどの工夫が必要です。
アプリが人の動きを促すものであれば、動きを徐々に導入します。
例えば、ARゲームに入ってすぐに、仮想の発射物を避けさせるようなことはしない方がいいでしょう。
人々がアプリでのAR体験に慣れるまで時間をかけ、徐々に動きを促すようにします。
人々の安全に配慮する。
AR体験に没頭しているとき、人々は必ずしも物理的な環境を意識しているわけではありません。
そのため、急激な動きや大きな動きをすることは危険です。
例えば、ゲームでは大きな動きや急な動きをさせないようにするなど、アプリを安全に操作できる方法を検討しましょう。
Using Coaching to Get People Started
アプリでAR体験をしてもらうためには、ARKitが周囲の環境を評価し、表面を検出できるように、デバイスを動かす必要があります。
iOS 13以降では、内蔵のコーチングビューを使用して、初期化プロセス中に人々が何をすべきかを示し、フィードバックを提供できます。
また、コーチングビューは、人が別のアプリケーションに一時的に切り替えたなどの理由でAR体験が中断された後に、ARの再初期化(再ローカリゼーションと呼ばれるプロセス)を支援するためにも使用できます。
https://gyazo.com/e93e8338064c4277ddde96227dbee530
コーチングビューを使用している間は、不要なアプリのUIを隠すことができます。
デフォルトでは、初期化または再ローカライズの開始時にコーチングビューが自動的に表示されるため、コーチングビューの指示に集中できるよう、関係のないUIを非表示にする準備をしておく必要があります。
必要に応じて、カスタムのコーチングエクスペリエンスを提供します。
システムが提供するコーチングビューは、水平面や垂直面の検出などの特定の情報を提供できるように設定できますが、追加の情報が必要な場合や、異なるビジュアルスタイルを使用したい場合もあります。
カスタムのコーチングエクスペリエンスをデザインしたい場合は、システムが提供するコーチングビューを参考にしてください。
Helping People Place Objects
サーフェスの位置を確認し、オブジェクトを配置するタイミングを人々に示します。
システムが提供するコーチングビューを使用して、オブジェクトを置くための水平または垂直の平らな面を見つける手助けをすることができます。
ARKitが面を検出した後、アプリはオブジェクトの配置が可能になったことを示すカスタムビジュアルインジケータを表示できます。
インジケータを検出されたサーフェスの平面に合わせることで、配置されたオブジェクトが環境の中でどのように見えるのかを理解してもらうことができます。
https://gyazo.com/22c5c6052991f55a2a78d82a0e44c24a
人が物を置いたら、すぐにその物をAR環境に組み込む。
サーフェスの検出は、短時間で徐々に精度が上がっていきますが、より正確なデータを待ってからオブジェクトを配置するのは避けた方が良いでしょう。
人がオブジェクトを置いたときには、その情報をもとに即座に対応し、表面検出が完了したら、必要に応じてオブジェクトの位置を微妙に修正していきます。
例えば、検出されたサーフェイスの範囲を超えてオブジェクトが置かれた場合、オブジェクトをサーフェイスに優しく押し戻します。
画面外の仮想オブジェクトに人を誘導することを検討する。
画面外にあるオブジェクトを人が見つけるのは難しい場合があります。
このような場合、視覚的または聴覚的な手がかりを提供することで、そのようなオブジェクトを見つけやすくすることができます。
例えば、画面外の左端にあるものは、画面の左端にインジケータを表示し、その方向にカメラを向けるように誘導することができます。
検出されたサーフェスのエッジにオブジェクトを正確に合わせようとしないでください。
ARでは、サーフェスの境界は近似値であり、周囲の環境をさらに分析すると変化する可能性があります。
面の分類情報をオブジェクトの配置に反映させる。
例えば、「床」に分類された平面にのみバーチャルな家具を置くことができるようにしたり、バーチャルなゲームボードを置くためには「テーブル」に分類された平面を必要とするようにしたりする。
Designing Intuitive, Delightful Object Interactions
可能な限り、人が直接手を動かしてオブジェクトを操作できるようにしましょう。
画面上の3Dオブジェクトを直接触って操作する方が、画面内で間接的に操作するよりも没入感があり、直感的に操作できます。
しかし、アプリを使用する際に人が動き回るような状況では、間接的な操作の方がうまくいくこともあります。
https://gyazo.com/81d84619c7837468e83aba7b74ed2046
https://gyazo.com/548158cabe61953539a711f995c776fb
標準的な慣れ親しんだジェスチャーを使って、仮想オブジェクトを直接操作することができます。
たとえば、オブジェクトの移動には1本指のドラッグジェスチャーを、オブジェクトの回転には2本指の回転ジェスチャーをサポートすることが考えられます。
一般的に、インタラクションはシンプルに保ちます。
タッチ・ジェスチャーは本質的に2次元ですが、AR体験は現実の世界の3次元を含みます。
仮想オブジェクトとのインタラクションをシンプルにするには、以下のようなアプローチが考えられます。
https://gyazo.com/0430ce0ef6bad8a2ae4c0118d0d2f439
https://gyazo.com/2222e6b47a06f1cf351e24e54b224542
インタラクティブな仮想オブジェクトの適度な近さでのジェスチャーに反応する。
小さかったり、薄かったり、離れた場所にあるオブジェクトの特定の場所を狙ってタッチするのは、正確に行うのが難しい場合があります。
アプリがインタラクティブなオブジェクトの近くでジェスチャーを検出した場合、通常は人々がそのオブジェクトに影響を与えたいと考えていると考えるのが最善です。
アプリで意味がある場合は、ユーザー主導のオブジェクトのスケーリングをサポートします。
たとえば、ユーザーが想像上の環境を探索できるアプリの場合、現実の世界を表現する必要がないため、オブジェクトのスケーリングをサポートすることは理にかなっています。
一方で、買い物客が購入する家具を決めるためのアプリの場合、椅子のオブジェクトを拡大縮小させても、その椅子が部屋でどのように見えるかをイメージすることはできません。
Tips
アプリの目的にかかわらず、オブジェクトの距離を調整するためにスケーリングを使用しないでください。
遠くにあるものを近くに見せようとして大きくすると、結果的に遠くにあるものが大きく見えてしまいます。
矛盾するジェスチャーには注意が必要です。
例えば、2本指のピンチジェスチャーは、2本指の回転ジェスチャーと似ています。
このように似たようなジェスチャーを2つ実装した場合は、アプリをテストして、それらが正しく解釈されることを確認してください。
アプリのAR環境の物理学と一致したバーチャルオブジェクトの動きを目指しましょう。
人々は、ざらざらした表面や凹凸のある表面の上をオブジェクトがスムーズに動くことを必ずしも期待していませんが、オブジェクトが動いている間も見えていることを期待しています。
動いているオブジェクトは現実世界の表面にくっついているようにし、人がオブジェクトのサイズを変えたり、回転させたり、動かしたりすると、オブジェクトがジャンプしたり、消えたり、また現れたりするようなことがないようにしましょう。
さらに魅力的なインタラクションの方法を模索する。
ARで人々が仮想オブジェクトとインタラクトする方法は、ジェスチャーだけではありません。
アプリは、動きや近さなどの他の要素を利用して、コンテンツに命を吹き込むことができます。
例えば、ゲームのキャラクターが、人が歩いてくると首をかしげて人を見る、というようなことです。
Designing a Great Multiuser Experience
複数の人がアプリのAR体験を共有する場合、それぞれの参加者が独立して環境をマッピングし、ARKitが自動的にそれらのマップを統合します。
人のオクルージョンを有効にすることを検討してください。
アプリが、デバイスのカメラフィードに表示される人物の背後に仮想オブジェクトを配置することをサポートしている場合、人物がオブジェクトを覆い隠すようにすることで、現実のような錯覚を高めることができます。
可能な限り、マルチユーザーのAR体験に新しい参加者を参加させる。
体験開始前にすべての参加者が参加しなければならないアプリでない限り、進行中のAR体験に新しい人がすぐに参加できるように、暗黙のマップマージを使用することを検討してください。
Reacting to Real-World Objects
現実世界の環境にある既知の画像やオブジェクトを使用して、仮想コンテンツの表示をトリガーすることで、AR体験を向上させることができます。
例えば、SF映画の劇場ポスターを認識するアプリでは、ポスターから仮想の宇宙船を出現させ、環境内を飛び回らせることができます。
また、美術館のアプリでは、彫刻を認識するとバーチャルツアーガイドが表示されます。
このような体験を可能にするには、アプリが2D参照画像や3D参照オブジェクトのセットを提供し、ARKitが現在の環境でこれらのアイテムをいつ、どこで検出したかを示す必要があります。
検出された画像が最初に消えたときには、それに取り付けられている仮想オブジェクトの削除を遅らせることを検討してください。
ARKitは、検出された画像の位置や向きの変化を追跡しません。
バーチャルオブジェクトがちらつくのを防ぐために、フェードアウトや削除するまでに最大1秒待つことを検討してください。
一度に使用する参照画像の数を制限する。
画像検出のパフォーマンスは、ARKitが現実世界の環境で100個以下の異なる画像を探すときに、最もよく機能します。
100枚以上の参照画像が必要な場合は、状況に応じてアクティブな参照画像のセットを変更することができます。
例えば、博物館のガイドアプリでは、位置情報サービスの使用許可を得て、人がいる場所を特定し、その場所に表示されている画像だけを探すことができます。
正確な位置情報を必要とする参照画像の数を制限する。
参照画像の位置を更新するには、より多くのリソースが必要です。画像が環境中で動く可能性がある場合や、添付されたアニメーションやバーチャルオブジェクトが画像のサイズに比べて小さい場合は、追跡画像を使用します。
Communicating with People
説明用のテキストを表示する必要がある場合は、親しみやすい用語を使用してください。
ARは高度な概念であり、人によっては怖く感じるかもしれません。親しみやすくするために、ARKit、ワールドディテクション、トラッキングなどの専門用語は使わないようにしましょう。
代わりに、多くの人が理解できるような親しみやすい会話用語を使いましょう。
table: Do - Don't
Do Don't
Unable to find a surface. Try moving to the side or repositioning your phone. Unable to find a plane. Adjust tracking.
Try turning on more lights and moving around. Insufficient features.
Try moving your phone more slowly. Excessive motion detected.
3次元的な状況では、3Dヒントが好ましい。
例えば、オブジェクトの周囲に3Dの回転インジケータを配置すると、2Dのオーバーレイにテキストベースの指示を表示するよりも直感的に理解できます。
人が文脈上のヒントに反応しない場合を除いて、3Dコンテキストでテキストのオーバーレイヒントを表示することは避けてください。
https://gyazo.com/3c505509da817eebdb8aa82b76d3b1f4
https://gyazo.com/3c505509da817eebdb8aa82b76d3b1f4
重要なテキストは読みやすく。
重要なラベル、注釈、指示などに使用されるテキストは、画面スペースを使って表示します。
3D空間にテキストを表示する必要がある場合は、テキストが人の方を向くようにし、テキストとラベル付けされたオブジェクトの間の距離に関わらず、同じ文字サイズを使用してください。
必要に応じて、より多くの情報を得るための手段を提供する。
タップするとさらに詳しい情報が得られることを示すために、アプリのエクスペリエンスに合ったビジュアルインジケータをデザインします。
https://gyazo.com/87c256e5fbfedf0acf4a5fd8525c1454
https://gyazo.com/053d15ca868d4ea9143e85d261fb644c
Handling Interruptions
ARKitは、他のアプリに一時的に切り替えたり、電話を受けたりするような中断時には、デバイスの位置や方向を追跡することができません。
中断が終わると、以前に配置した仮想オブジェクトが現実世界の誤った位置に表示される可能性が高くなります。
再配置を有効にすると、ARKit は新しい情報を使用して、バーチャルオブジェクトを元の現実世界の位置に戻そうとします。
システムが提供するコーチングビューを使用して、人々が再ローカライズするのを支援することを検討してください。
再定位の際、ARKit は以前の状態と現在の環境の新しい観測結果との整合性を試みます。
このような観察を可能にするために、コーチングビューを使用して、デバイスを以前の位置や方向に戻す手助けをすることができます。
https://gyazo.com/e8a232c39d9203a37fae3db1eb247550
再配置の際には、以前に配置した仮想オブジェクトを隠すことを検討します。
再ローカライズ時のちらつきなどの不快な視覚効果を避けるためには、バーチャルオブジェクトを隠して、新しい位置で再表示するのが最善の方法です。
アプリがARと非ARの両方の体験をサポートしている場合は、中断を最小限に抑えます。
中断を避けるためには、AR体験の中に非AR体験を組み込むことで、ユーザーがARを終了したり再起動したりすることなくタスクを処理できるようにする方法があります。
例えば、家具を部屋に置いて購入するかどうかを決めるアプリの場合、ユーザーがAR体験を離れることなく家具の張り地を変更できるようにします。
再配置のキャンセルを可能にする。
ユーザーがデバイスを中断前の状態に近い位置に配置しないと、再配置は成功せずにいつまでも続きます。
セッションを再開するようにコーチングしてもうまくいかない場合は、リセットボタンなど、AR体験を再開するための方法を提供することを検討してください。
前面カメラが顔を約半秒以上追跡できない場合は、その旨を表示する。
カメラが人の顔を追えなくなったことを視覚的に表示します。その際、文字による指示が必要な場合は、最小限にとどめてください。
Suggesting Ways to Resolve Problems
期待通りの体験が得られなかった場合は、体験をリセットしてもらいましょう。
状況が改善されるのを待ったり、オブジェクトの配置に悩んだりすることを強要してはいけません。
条件が整うのを待ったり、物の配置に悩んだりするのではなく、もう一度やり直して、より良い結果が得られるかどうかを確認してもらいましょう。
https://gyazo.com/7eba27969881546dd22fcb8f98c4df02
https://gyazo.com/2b1f139e225b5e45db7ffb26d4f43b2d
問題が発生した場合、可能な修正方法を提案する。
現実世界の環境の分析とサーフェスの検出は、光が足りない、サーフェスが過度に反射している、サーフェスのディテールが十分でない、カメラの動きが大きすぎるなど、さまざまな理由で失敗したり、時間がかかりすぎることがあります。
このような問題がアプリに通知された場合は、わかりやすく親しみやすい言葉で、問題を解決するための提案をしてください。
table: Problem - Possible suggestion
Problem Possible suggestion
Insufficient features detected. Try turning on more lights and moving around.
Excessive motion detected. Try moving your phone slower.
Surface detection takes too long. Try moving around, turning on more lights, and making sure your phone is pointed at a sufficiently textured surface.
AR Glyph
アプリケーションは、ARKitベースのエクスペリエンスを起動するコントロールにARグリフを表示できます。
https://gyazo.com/c659e629e0382f23ad6d55d025ba9e07
https://gyazo.com/743406fb9fbbd7b9dbe19eee36dae6cc
ARグリフは意図的に使用してください。
このグリフは、ARKit ベースのエクスペリエンスを開始するためにのみ使用してください。
グリフを変更したり(サイズや色の調整を除く)、他の目的に使用したり、ARKitで作成されていないAR体験と組み合わせて使用したりしないでください。
最小限のクリアスペースを確保してください。
ARグリフの周囲に必要な最小限のクリアスペースは、グリフの高さの10%です。
他の要素がこのスペースを侵害したり、グリフを遮ったりしないようにしてください。
https://gyazo.com/f0b0f4cd7df950707c62dcea04fd6634
AR Badges
商品やその他のオブジェクトのコレクションを含むアプリは、ARKitを使ってARで見ることができる特定のアイテムを識別するためにバッジを使用することができます。
例えば、デパートのアプリでは、購入する前に自宅で確認できる家具をバッジで示すことができる。
https://gyazo.com/6475df35dcc904cb1a8924c00ec63cdb
ARバッジは、改変せずにそのままお使いください。
これらの画像は、ARKitを使ってARで見ることができる製品やその他のオブジェクトを識別するためにのみ使用してください。
バッジを改変したり、色を変えたり、他の目的で使用したり、ARKitで作成されていないAR体験と組み合わせて使用したりしないでください。
https://gyazo.com/c7496dc501f01521c3b5bf03058a8cdf
https://gyazo.com/990a62a675671c94e92e31d0c3ed44a4
グリフのみのバッジよりもARバッジの方が好ましい。
一般的には、ARバッジを設置できない制約のあるスペースでは、グリフのみのバッジを使用してください。
どちらのバッジも、デフォルトのサイズで問題なく動作します。
バッジを使用するのは、アプリにARで表示できるオブジェクトとできないオブジェクトが混在している場合のみです。
アプリ内のすべてのオブジェクトがARで表示できる場合は、バッジは必要ありません。
バッジの配置は一貫性を持って明確にします。
バッジは、オブジェクトの写真の一角に表示されるのが最も美しく見えます。
常に同じコーナーに配置し、はっきりと見えるように十分な大きさを確保してください(ただし、写真の重要なディテールを隠してしまうような大きさではありません)。
最小限のクリアスペースを確保する。
ARバッジの周囲には、バッジの高さの10%のクリアスペースが必要です。
他の要素がこのスペースを侵害したり、バッジを遮ったりすることがあってはなりません。
https://gyazo.com/421801ba3277567637c09030163e804a
https://gyazo.com/55d3f84f12c5121006debe4bfeb1592a